package com.easygem.front.service;

import com.easygem.common.model.front.ResourceInfo;
import com.easygem.common.vo.front.ResourceInfoVO;
import com.easygem.common.vo.system.PageVO;
import com.easygem.front.mapper.ResourceInfoMapper;
import com.easygem.front.service.base.IBaseService;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author 何维佳
 * @version 1.0
 * @className ResourceInfoService
 * @Description TODO
 * @date 2024/12/23 14:55
 */
public interface ResourceInfoService extends IBaseService<ResourceInfoMapper, ResourceInfo,Integer> {

    /**
     * 多条件联表查询资源信息
     * @param pageNum
     * @param pageSize
     * @param resourceInfoVO
     * @return
     */
    PageVO<ResourceInfo> findList(Integer pageNum, Integer pageSize, ResourceInfoVO resourceInfoVO);

    /**
     * 根据资源id查询资源信息
     * @param Id
     * @return
     */
    List<ResourceInfo> findListById(Long Id);

    /**
     * 更新资源信息
     * @param resourceInfoVO
     * @return
     */
    int update(ResourceInfoVO resourceInfoVO);

    /**
     * 根据资源id将资源状态改为删除
     * @param Id
     * @return
     */
    int delete(Long Id);

    /**
     * 将资源拉入黑名单
     * @param resourceInfoVO
     * @return
     */
    int insertBlackList(ResourceInfoVO resourceInfoVO);

    /**
     * 将资源转入公海
     * @param Id
     * @return
     */
    int insertHigh_seas_clientList(Long Id);

    /**
     * 批量导出
     * @param ids
     * @return
     */
    List<ResourceInfo> findAllByIds(List<Long> ids);

    /**
     * 判断是否在黑名单中
     * @param clientPhone
     * @return
     */
    int isBlacklist(String clientPhone);

    /**
     * 资源回收站
     * @param pageNum 页码
     * @param pageSize 一页显示数据
     * @param resourceInfoVO 对象
     * @return
     */
    PageVO<ResourceInfo> IsDeleteFindList(Integer pageNum, Integer pageSize, ResourceInfoVO resourceInfoVO);

    /**
     * 清空资源回收站
     */
    void deleteResourceInfo(ResourceInfoVO resourceInfoVO);
    /**
     * 通过条件查出已删除的资源数据,用于导出
     * @return
     */
    List<ResourceInfo> findByResourceInfoAll(ResourceInfoVO resourceInfoVO);




    /**
     * 客户回收站
     * @param pageNum 页码
     * @param pageSize 一页显示数据
     * @param resourceInfoVO 对象
     * @return
     */
    PageVO<ResourceInfo> selectAllCustomer(Integer pageNum, Integer pageSize, ResourceInfoVO resourceInfoVO);
    /**
     * 清空或按添加清空回收站的客户和资源
     * @param resourceInfoVO 对象
     */
    void deleteCustomer(ResourceInfoVO resourceInfoVO);
    /**
     * 删除或批量回收站的客户和资源
     * @param idList 客户id集合
     */
    void deleteCustomerId(List<Long> idList);
    /**
     * 批量分配或分配回收站的客户
     * @param userList 用户id
     * @param resourceList 客户id
     * @return
     */
    int distributeCustomer(@Param("userList") List<Long> userList,
                           @Param("resourceList") List<Long> resourceList);


    /**
     * 恢复客户
     *
     * @param resourceIds 客户id集合
     */
    void updateIsDelete(List<Long> resourceIds);


    /**
     * 公海预警
     * @param pageNum 页码
     * @param pageSize 一页显示数据
     * @param resourceInfoVO 对象
     * @return
     */
    PageVO<ResourceInfo> selectHighSeasClient(Integer pageNum, Integer pageSize, ResourceInfoVO resourceInfoVO);


    /**
     * 回收站预警
     * @param pageNum 页码
     * @param pageSize 一页显示数据
     * @param resourceInfoVO 对象
     * @return
     */
    PageVO<ResourceInfo> selectRecycle(Integer pageNum, Integer pageSize, ResourceInfoVO resourceInfoVO);

    /**
     * 定时函数调用的方法
     * @return
     */
    void scheduled();

    /**
     * 删除归属人状态为-2的资源
     */
    void deleteByUserStatus();
}

